package com.yu.demo.user.domain.service;

import com.yu.demo.user.domain.entity.User;
import com.yu.demo.user.domain.valueobject.Email;
import com.yu.demo.user.domain.valueobject.Username;

/**
 * 用户领域服务
 * 处理跨实体的业务逻辑和复杂的业务规则
 */
public interface UserDomainService {
    
    /**
     * 验证用户名唯一性
     */
    boolean isUsernameUnique(Username username);
    
    /**
     * 验证邮箱唯一性
     */
    boolean isEmailUnique(Email email);
    
    /**
     * 验证用户是否可以注册
     */
    boolean canRegister(User user);
    
    /**
     * 验证用户是否可以登录
     */
    boolean canLogin(User user);
    
    /**
     * 验证用户是否可以更新信息
     */
    boolean canUpdateProfile(User user, Username newUsername, Email newEmail);
    
    /**
     * 验证用户是否可以更改角色
     */
    boolean canChangeRole(User currentUser, User targetUser, String newRole);
}
